home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-01-01 | 29.1 KB | 1,450 lines |
- ;64'er Music Player v.1.0
- ;All Coding and Design by THE SYNDROM
- ;---------------------------------------
- ;---------------------------------------
- ;editor version
- ;---------------------------------------
- *= $1000
-
- jmp init
- jmp play
- jmp play2
- ;---------------------------------------
- hardval .byte $0f ;(xy: x=8->keep ad
- ; x=0-> ad=y)
-
- filtyp .byte $00
- filcon .byte $00
- filtlo .byte $00
- filthi .byte $00
- volume .byte $00
- resonance .byte $00
- speed .byte $00
- speed1 .byte $00
- multi .byte $00
- identify .byte $00
- fade .byte $00
- fadetime .byte $00
- nofi .byte $00
- filfreql .byte $00
- filfreqh .byte $00
- fcont .byte $00
- filconf .byte $00
- filtaddl .byte $00
- filtaddh .byte $00
- filtfrm .byte $00
- filpos .byte $00
- frqf .byte $00
- .text "-player & music by the "
- .text "syndrom!-"
- flo .byte $00
- fhi .byte $00
- wspeed .byte $00,0
- .byte $00,0
- ;---------------------------------------
- dur .byte $00
- durat .byte $00
- snd .byte $00
- ad .byte $00
- sr .byte $00
- on .byte $00
- vdir .byte $00
- .byte $00,0,0,0,0,0,0 ;7 bytes
- .byte $00,0,0,0,0,0,0 ;7 bytes
- trpos .byte $00
- trackl .byte $00
- trackh .byte $00
- secpos .byte $00
- wave .byte $00
- filcont .byte $00
- pupos .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
- andor .byte $00
- cont .byte $00
- trpose .byte $00
- fine .byte $00
- wavepos .byte $00
- switch .byte $00
- nopu .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
- vspeed .byte $00
- vaddl .byte $00
- vaddh .byte $00
- svol .byte $00
- glideh .byte $00
- glidel .byte $00
- gll .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
- glh .byte $00
- glto .byte $00
- glfrom .byte $00
- gldel .byte $00
- gldeh .byte $00
- noteok .byte $00
- drum .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
- pulslo .byte $00
- pulshi .byte $00
- pulsfrm .byte $00
- pulsaddl .byte $00
- pulsaddh .byte $00
- switch2 .byte $00
- cut .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
- sndn .byte $00
- effhi .byte $00
- efflo .byte $00
- pcont .byte $00
- wvspeed .byte $00
- hardon .byte $00
- notev .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
- wvspeed1 .byte $00
- vspeed1 .byte $00
- vaddl1 .byte $00
- vaddh1 .byte $00
- vilo .byte $00
- vihi .byte $00
- vifirst .byte $00
- .byte $00,0,0,0,0,0,0 ; -"-
- .byte $00,0,0,0,0,0,0 ; -"-
-
- filcont1 .byte $fe
- wavexpos .byte $00
- xwvspeed .byte $00
- .byte $00
- .byte $00
- .byte $00
- .byte $00
- .byte $fd,0,0,0,0,0,0 ; -"-
- .byte $fb,0,0,0,0,0,0 ; -"-
-
-
-
-
- mark .byte $00
-
-
-
-
- ;---------------------------------------
- init asl a
- asl a
- asl a
- tay
- ldx #$00
- txa
- initcl sta dur,x ;clear data
- inx
- cpx #mark-dur
- bne initcl
- ldx #0
- initcl2 sta filtyp,x
- inx
- cpx #frqf-filtyp
- bne initcl2
- ldx #$00 ;prepare pointers
- trfill lda trakk,y
- sta trackl,x
- lda trakk+1,y
- sta trackh,x
- lda #9 ;reset voices
- sta $d404,x
- sta on,x
- lda #0
- sta ad,x
- sta sr,x
- lda #$02 ;startvalues
- sta durat,x
- lda #$ff
- sta wvspeed1,x
- lda #$80 ;x0,x7,xe for fvoice
- sta filcon
- lda #1
- sta hardon,x
- sta andor,x
- iny
- iny
- txa
- clc
- adc #7 ;0-7-14-loop
- tax
- cpx #21
- bne trfill
- lda trakk,y
- pha
- lsr a
- lsr a
- lsr a
- lsr a
- sta wspeed
- pla
- and #$0f
- sta wspeed+1
- lda #3
- sta speed1
- lda trakk+1,y
- and #$0f
- sta volume
- lda #1
- sta filcont
- asl a
- sta filcont+7
- asl a
- sta filcont+14
- lda #$fe
- sta filcont1
- lda #$fd
- sta filcont1+7
- lda #$fb
- sta filcont1+14
- lda #0
- sta filconf
- sta wspeedc+1
- rts
- ;---------------------------------------
- play lda $f8 ;save used
- pha ;zeropage to stack
- lda $f9
- pha
- dec speed1 ;main-speed-control
- bpl new1
- wspeedc lda #0
- eor #1
- sta wspeedc+1
- tax
- lda wspeed,x
- sta speed
- sta speed1
- new1 ldx #0
- jsr voice
- ldx #7
- jsr voice
- ldx #14
- jsr voice
- lda fade ;volume-fade
- beq nofade ;active ?
- dec fadetime
- lda fadetime
- bne nofade
- ftime lda #0 ;direct code
- sta fadetime ;accessed
- lda volume
- clc
- adc fade
- sta volume
- cmp #$ff ;lower stop
- beq fadestop
- cmp #$10
- bne nofade ;upper stop
- lda #$0f
- sta volume
- bne nofade
-
- fadestop lda #0
- sta fade
- sta volume
- nofade lda volume ;permanent
- ora filtyp ;controls
- sta $d418
- lda filconf
- ora resonance
- sta $d417
- lda filfreql
- sta $d415
- lda filfreqh
- sta $d416
- pla ;rewrite zero-
- sta $f9 ;page
- pla
- sta $f8
- rts
- ;---------------------------------------
- voice lda on,x ;voice active?
- bne voion
- rts
- voion lda speed1 ;new duration-
- cmp speed ;frame ?
- beq new ;
-
- jmp voice3;hr-check for low
- ;speeds necessary
- new dec durat,x ;new command-
- beq new3 ;frame ?
- jmp voice3
- ;---------------------------------------
- ;track-control-routines
- ;---------------------------------------
- ;commands
- ;$ff xx loop xx
- ;$fe stop voice
- ;$fd xx transpose +xx
- ;$fc xx transpose -xx
- ;$fb xx fadein xx
- ;$fa xx fadeout xx
- ;$ex volume x
- ;---------------------------------------
- new3 lda trackl,x ;set pointers
- sta $f8
- lda trackh,x
- sta $f9
- ;---------------------------------------
- ;check track-commands
- ;---------------------------------------
- read
- ldy trpos,x
- lda ($f8),y
- bpl nocom ;sector or command?
- cmp #$ff ;end
- bne com1
- iny
- lda ($f8),y
- sta trpos,x
- tay
- jmp read+3
- com1 cmp #$fe ;stop
- bne com2
- lda #0
- sta on,x
- lda #1
- sta cut,x
- rts
- com2 cmp #$fd ;tr+xx
- bne com3
- iny
- lda ($f8),y
- dazu sta trpose,x
- iny
- tya
- sta trpos,x
- jmp read+3
- com3 cmp #$fc ;tr-xx
- bne com4
- iny
- lda ($f8),y
- eor #$ff
- clc
- adc #$01
- jmp dazu
- com4 cmp #$fb ;fd+xx
- bne com5
- iny
- lda ($f8),y
- sta fadetime
- sta ftime+1
- lda #1
- sta fade
- jmp dazu+3
- com5 cmp #$fa ;fd-xx
- bne com6
- iny
- lda ($f8),y
- sta fadetime
- sta ftime+1
- lda #$ff
- sta fade
- jmp dazu+3
- com6 cmp #$e0
- bcc com7
- cmp #$f0 ;mvl.x
- bcs com7
- and #$0f
- sta volume
- inc trpos,x
- com7 jmp read
- ;---------------------------------------
- ;Sector-control
- ;commands $fd.xx dur xx
- ;$fc.xx snd xx
- ;$fe cont(---)
- ;$fb gate
- ;$fa switch
- ;$f9 cut
- ;---------------------------------------
- nocom tay ;set pointers
- lda seclo,y
- sta $f8
- lda sechi,y
- sta $f9
- read3 ldy secpos,x
- lda ($f8),y ;command or
- cmp #$c0 ;note ?
- bcs nnote ;
- pha
- lda #0
- sta gll,x
- sta glh,x
- sta glidel,x
- sta glideh,x
- sta vspeed,x
- sta vilo,x
- sta vihi,x
-
- pla
- jmp note
- nnote
- cmp #$ff ;end
- bne scom1
- inc trpos,x
- lda #0
- sta secpos,x
- lda switch,x ;no cut if switch
- bne nowrap ;is active
- lda #$ff
- sta wvspeed1,x
- lda #$00
- sta wave,x
- nowrap jmp new3
- scom1 cmp #$f9
- bcs scom1a
- jmp scom7
- scom1a cmp #$fe ;---
- bne scom2
- note3 iny
- tya
- sta secpos,x
- lda #1
- sta cont,x
- jmp note2
- scom2 cmp #$fd ;dur.xx
- bne scom3
- iny
- lda ($f8),y
- sta dur,x
- sta durat,x
- dazu4 iny
- tya
- sta secpos,x
- jmp read3+3
- scom3 cmp #$fc ;snd.xx
- bne scom4
- iny
- lda ($f8),y
- sta snd,x
- sta sndn,x
- lda #0
- sta wavexpos,x
- jmp dazu4
- scom4 cmp #$fb ;gate
- bne scom5
- lda #1
- eor andor,x
- sta andor,x
- jmp note3
-
-
-
- scom5 cmp #$fa ;switch
- bne scom6
- lda #1
- eor switch,x
- sta switch,x
- nofx inc secpos,x
- jmp read3
-
- scom6 cmp #$f9 ;cut
- bne scom7
- lda dur,x
- sta durat,x
- lda #8 ;resets voice
- sta $d404,x ;+ voice routines
- sta wave,x ;to save rastertime
- lda #$00
- sta $d405,x
- sta $d406,x
- sta ad,x
- sta sr,x
- lda #$ff
- sta wvspeed1,x
- lda #1
- sta cut,x
- inc secpos,x
- jmp hrcheck
- scom7 and #$3f ;supercommands
- tay
- lda commtab1,y
- sta effhi,x
- lda commtab2,y
- sta efflo,x
- lda commtab,y
- asl a
- tay
- lda commtab3,y
- sta jump+1
- lda commtab3+1,y
- sta jump+2
-
- jump jmp read3
-
-
- note cmp #$60 ;count notevalue
- bcc normal
- sec
- sbc #$60
- normal clc
- adc trpose,x
- sta notev,x ;new note
- sta noteok,x
- inc secpos,x
- note2
-
- lda dur,x ;previous note
- sta durat,x
- lda switch,x
- bne swon
- lda cont,x
- bne swon
- lda #0
- sta cut,x
- lda #1
- sta andor,x
- ldy snd,x
- ;this frame
- lda adtab,y;sets the new
- sta ad,x ;adsr-settings
- sta $d405,x;= beginning of a
- lda svol,x
- beq ss1
- lda srtab,y
- and #$0f
- ora svol,x
- bne ss2
- ss1 lda srtab,y;new note = max.
- ss2 sta sr,x ;rastertime
- sta $d406,x
- lda adtab,y;sets the new
- sta ad,x ;adsr-settings
- sta $d405,x;= beginning of a
- jmp noconti
- ss lda cont,x
- beq noconti
-
- swon jsr play3
- jsr sid
- jmp nocont
- noconti lda wavexpos,x
- bne supwav
- lda wavptab,y
- supwav sta wavepos,x
- tya
- pha
- ldy wavepos,x ;sets wave
- lda wavetab,y ;(first row)
- pha
- and #$f7
- sta wave,x
- sta $d404,x ;check for
- pla ;drum-mode
- and #$08
- sta drum,x
- beq nodrum2
- lda freqtab,y
- sta $d401,x
- sta noteok,x
- lda #0
- sta $d400,x
- jmp nonon
- nodrum2 lda freqtab,y
- clc
- adc notev,x
- sta noteok,x
- tay
- lda frqlo,y
- clc
- adc fine,x
- sta $d400,x
- lda frqhi,y
- adc #0
- sta $d401,x
- nonon pla
- tay
- lda wavexpos,x
- beq slow2
- lda xwvspeed,x
- jmp slow1
-
- slow2 lda efftab,y
- and #$0f
- slow1 sta wvspeed,x
- sta wvspeed1,x
- inc wavepos,x
- lda pcont,x
- bne filll
- lda #0
- sta nopu,x
- ;---------------------------------------
- lda pulptab,y ;pulse-routine
- tay ;init
- clc
- adc #1
- sta pupos,x
- lda pulstab1,y
- sta pulshi,x
- sta $d403,x
- lda pulstab2,y
- sta pulslo,x
- sta $d402,x
- lda #0
- sta pulsfrm,x
- ldy snd,x
- ;---------------------------------------
- filll
- cpx filcon
- bne nocont
-
- lda fcont
- bne nocont
-
- lda #0
- sta nofi
- sta filtfrm
- lda filptab,y
- tay
- clc
- adc #1
- sta filpos
- lda frqf
- beq fillt
- ldy flo
- sty filtlo
- tya
- and #7
- sta filfreql
- lda fhi
- sta filthi
- jmp fillt2
-
- fillt lda filttab1,y
- sta filthi
- pha
- lda filttab2,y
- sta filtlo
- tay
- and #7
- sta filfreql
- pla
- fillt2 lsr a
- ror filtlo
- lsr a
- ror filtlo
- lsr a
- ror filtlo
- lda filtlo
- sta filfreqh
- sty filtlo
-
-
-
-
-
- nocont lda #0
- sta cont,x
-
- lda hardon,x
- beq hrcheck
-
- lda #1
- sta andor,x
-
- hrcheck ldy secpos,x ;checking next
- hrcheck2 lda ($f8),y ;sectordata for
- cmp #$ff ;hardrestart on
- ;or off
- beq onyes ;user can manipulate
- noend cmp #$60 ;this (onyes/onno)
- bcc onyes ;(new sector hr)
- cmp #$c0
- bcc onno
- cmp #$fe
- beq onno
- cmp #$fb
- beq onno
- cmp #$f9
- beq onno
- cmp #$fc
- bne swi1
- iny
- lda ($f8),y
- sta sndn,x
- dey
- lda #$fc
- swi1
- cmp #$fa
- bne swi
- lda #1
- eor switch,x
- sta switch2,x
- jmp plus1
-
-
- swi cmp #$fc
- bcc plus1
- iny
- plus1 iny
- bne hrcheck2
-
- onno lda #0
- beq hrset
- onyes lda #1
- hrset sta hardon,x
- lda switch2,x
- beq ond
- lda #0
- sta hardon,x
- ond
- rts
- ;---------------------------------------
- ;hard-restart-routine
- ;---------------------------------------
- voice3 lda speed
- bne nospeed0
- lda durat,x
- cmp #$04
- bcs nichts
- cmp #$01
- beq frame1
- ;frame 2+1
- frame2
-
- lda hardon,x
- beq nichts
- jsr play3
-
- lda sr,x
- and #$f0
- sta $d406,x
- lda hardval
- bpl hrsett
- lda ad,x
- hrsett
- sta $d405,x
- lda wave,x
- and #$fe
- sta $d404,x
- lda #$00
- sta andor,x
- rts
-
- nospeed0
- cmp #1
- bne sp2
- spp lda speed1
- beq sp1
- lda durat,x
- cmp #1
- beq frame2
- jmp nichts
- sp1
- lda durat,x
- cmp #3
- bcs nichts
- cmp #1
- beq frame1
- jmp frame2
-
- sp2 lda durat,x
- cmp #$01
- bne nichts
- lda speed1
- beq frame1
- cmp #3
- bcc frame2
- nichts jsr play3
- jmp sid
-
-
-
-
- frame1
- lda hardon,x
- beq nichts
- ldy sndn,x ;this frame
- lda srtab,y;new note = max.
- sta sr,x ;rastertime
- sta $d406,x
- lda adtab,y;sets the new
- sta ad,x ;adsr-settings
- sta $d405,x;= beginning of a
- lda #$09
- sta $d404,x
- sta wave,x
- inc hardon,x
- rts
-
-
-
-
-
-
- ;---------------------------------------
- ; adsr-routines
- ;---------------------------------------
- play2 ldx #$00
- jsr play3d
- jsr sid2
- ldx #7
- jsr play3d
- jsr sid2
- ldx #14
- jsr play3d
- jmp sid2
- ;---------------------------------------
- play3
- ;---------------------------------------
- ;wave-freq-table-handling
- ;---------------------------------------
- lda cut,x
- beq ton
- rts
- ton
- ;---------------------------------------
- ;filterroutine
- ;---------------------------------------
- cpx filcon
- bne glide
- lda nofi
- bne glide
- lda filpos
- tay
- lda filtfrm
- bne nonewf
- nochmalf lda filttab1,y
- cmp #$90 ;check loop
- bne fp1
- lda filttab2,y
- sta filpos
- tay
- jmp nochmalf
- fp1 cmp #$91 ;check stop
- bne fp2
- lda #1
- sta nofi
- bne glide
-
-
- fp2 sta filtaddh ;count values
- lda filttab2,y
- sta filtaddl
- lda filttab2+1,y
- sta filtfrm
- tya
- clc
- adc #2
- sta filpos
- nonewf lda filtlo
- clc
- adc filtaddl
- sta filtlo
- tay
- and #7
- sta filfreql
- lda filthi
- adc filtaddh
- sta filthi
- dec filtfrm
-
- lsr a
- ror filtlo
- lsr a
- ror filtlo
- lsr a
- ror filtlo
- lda filtlo
- sta filfreqh
- sty filtlo
-
-
-
-
- ;---------------------------------------
- ;vib/slide/etc.
- ;---------------------------------------
- glide
- lda gll,x
- bne gly ;check if glide
- lda glh,x ;active
- bne gly
- jmp nogli
- gly
- lda #0
- sta vspeed,x
- sta vilo,x ;add values
- sta vihi,x ;disable vibr.
- clc
- lda glidel,x
- adc gll,x
- sta glidel,x
- lda glideh,x
- adc glh,x
- sta glideh,x
-
- lda glh,x
- bmi glup1
- ldy noteok,x ;reached
- lda frqlo,y ;destination
- clc ;frequence?
- adc glidel,x ;(upglide)
- pha
- lda frqhi,y
- adc glideh,x
- cmp gldeh,x
- bcc glup2
- bne glupen1
- glup4 pla
- cmp gldel,x
- bcc nogli
-
-
- glupen lda #0 ;stop glide
- sta glidel,x
- sta glideh,x
- sta gll,x
- sta glh,x
- lda glto,x
- sta notev,x
- sta noteok,x
- jmp nogli
-
- glup1
- ldy noteok,x
- lda frqlo,y ;check destin.
- clc ;for downglide
- adc glidel,x
- pha
- lda frqhi,y
- adc glideh,x
- cmp gldeh,x
- bcc glupen1
- bne glup2
- pla
- cmp gldel,x
- bcs nogli
- bcc glupen
- glupen1 pla
- jmp glupen
-
-
-
- glup2 pla
- ;---------------------------------------
- ;vibrato
- ;---------------------------------------
- nogli lda vspeed,x
- beq novib
-
- and #1
- bne nvib
- inc vifirst,x
- nvib lda vdir,x ;check direct.
- bne vido ;vib. up
- lda vifirst,x
- bne vi1
- inc vifirst,x ;halfvalue?
- lda vaddl1,x
- clc
- adc vilo,x
- sta vilo,x ;add half
- lda vaddh1,x
- adc vihi,x
- sta vihi,x
- jmp vi2
- vi1 lda vaddl,x ;add full
- clc
- adc vilo,x
- sta vilo,x
- lda vaddh,x
- adc vihi,x
- sta vihi,x
- vi2 inc vspeed1,x
- lda vspeed1,x ;dir.turn?
- cmp vspeed,x
- bne vi3
- vi4 lda #1
- eor vdir,x
- sta vdir,x
- vi3 jmp novib
- vido lda vilo,x ;vib. down
- sec
- sbc vaddl,x
- sta vilo,x ;sbc full
- lda vihi,x
- sbc vaddh,x
- sta vihi,x
- dec vspeed1,x
- beq vi4
- jmp novib
-
- play3d lda cut,x
- beq novib
- rts
-
-
- novib
- ;---------------------------------------
- ;wave/filt/pulse
- ;---------------------------------------
- lda wvspeed1,x ;new row ?
- cmp #$ff
- beq nochnich
- dec wvspeed1,x
- bpl nochnich
- lda wvspeed,x
- sta wvspeed1,x
- newread ldy wavepos,x
- inc wavepos,x
- lda wavetab,y
- cmp #$91 ;check stop
- beq schluss
- cmp #$90 ;check loop
- bne nextstep
- lda freqtab,y
- sta wavepos,x
- jmp newread
- nextstep pha
- and #$f7 ;check drummode
- sta wave,x
- pla
- and #$08
- sta drum,x
- beq nodrum
- lda freqtab,y
- sta noteok,x
- jmp nochnich
- nodrum lda freqtab,y
- clc
- adc notev,x
- sta noteok,x
- jmp nochnich
-
-
- schluss lda #$ff ;stop mark
- sta wvspeed1,x
- lda wave,x
- and #$40
- bne nochnich
- lda #1
- sta nopu,x
-
-
- nochnich
-
- ;---------------------------------------
- ;pulsroutine
- ;---------------------------------------
- lda nopu,x
- bne filli
- lda pupos,x
- tay
- lda pulsfrm,x ;new row?
- bne nonewset
- nochmal lda pulstab1,y
- cmp #$90 ;check loop
- bne pp1
- lda pulstab2,y
- sta pupos,x
- tay
- jmp nochmal
- pp1 cmp #$91 ;check stop
- bne pp2
- lda #1
- sta nopu,x
- bne filli
-
-
- pp2 sta pulsaddh,x ;count values
- lda pulstab2,y
- sta pulsaddl,x
- lda pulstab2+1,y
- sta pulsfrm,x
- tya
- clc
- adc #2
- sta pupos,x
- nonewset lda pulslo,x
- clc ;set values
- adc pulsaddl,x
- sta pulslo,x
- sta $d402,x
- lda pulshi,x
- adc pulsaddh,x
- sta pulshi,x
- sta $d403,x
- dec pulsfrm,x
-
-
-
- filli
- ;---------------------------------------
- ;writing the SID-registers
- ;---------------------------------------
- ldy noteok,x
- lda drum,x
- beq norm
- tya
- sta $d401,x
- lda #0
- sta $d400,x
- rts
- norm
- clc
- lda vilo,x
- adc glidel,x
- sta help
- lda vihi,x
- adc glideh,x
- sta help+1
- lda frqlo,y
- clc
- adc help
- sta help
- lda help+1
- adc frqhi,y
- sta help+1
- lda help
- clc
- adc fine,x
- sta $d400,x
- lda help+1
- adc #0
- sta $d401,x
- fip rts
-
- sid
- lda sr,x
- sta $d406,x
- lda ad,x ;registers
- sta $d405,x
-
-
-
- sid2
- lda hardon,x
- cmp #2
- beq witer
- lda wave,x
- tay ;if gatebit off by
- and #1 ;table, disable
- beq nogat ;gate command
- tya
- and #$fe
- ora andor,x
- tay
- nogat tya
- sta $d404,x ;write remaining
- witer
- rts
-
-
-
- help .byte $00,$00
- ;---------------------------------------
- ;Tables
- ;---------------------------------------
- frqlo .byte $0c,$1c,$2d,$3e,$47,$66
- .byte $7b,$91,$a9,$c3,$dd,$fa
- .byte $18,$38,$5a,$7d,$a3,$cc
- .byte $f6,$23,$53,$86,$bb,$f4
- .byte $30,$70,$b4,$fb,$47,$98
- .byte $ed,$47,$a7,$0c,$77,$e9
- .byte $61,$e1,$68,$f7,$8f,$30
- .byte $da,$8f,$4e,$18,$ef,$d2
- .byte $c3,$c3,$d1,$ef,$1f,$60
- .byte $b5,$1e,$9c,$31,$df,$a5
- .byte $87,$86,$a2,$df,$3e,$c1
- .byte $6b,$3c,$39,$63,$be,$4b
- .byte $0f,$0c,$45,$bf,$7d,$83
- .byte $d6,$79,$73,$c7,$7c,$97
- .byte $1e,$18,$8b,$7e,$fa,$06
- .byte $ac,$f3,$e6,$8f,$f8,$fc
- ;---------------------------------------
- frqhi .byte $01,$01,$01,$01,$01,$01
- .byte $01,$01,$01,$01,$01,$01
- .byte $02,$02,$02,$02,$02,$02
- .byte $02,$03,$03,$03,$03,$03
- .byte $04,$04,$04,$04,$05,$05
- .byte $05,$06,$06,$07,$07,$07
- .byte $08,$08,$09,$09,$0a,$0b
- .byte $0b,$0c,$0d,$0e,$0e,$0f
- .byte $10,$11,$12,$13,$15,$16
- .byte $17,$19,$1a,$1c,$1d,$1f
- .byte $21,$23,$25,$27,$2a,$2c
- .byte $2f,$32,$35,$38,$3b,$3f
- .byte $43,$47,$4b,$4f,$54,$59
- .byte $5e,$64,$6a,$70,$77,$7e
- .byte $86,$8e,$96,$9f,$a8,$b3
- .byte $bd,$c8,$d4,$e1,$ee,$fd
-
- susa
- ;---------------------------------------
- contp lda #1
- eor pcont,x
- sta pcont,x
- jmp nofx
- ;---------------------------------------
- sust lda efflo,x
- sta sr,x
- jmp nofx
- ;---------------------------------------
- adr lda efflo,x
- sta ad,x
- jmp nofx
- ;---------------------------------------
- vol lda efflo,x
- asl a
- asl a
- asl a
- asl a
- sta svol,x
- jmp nofx
- ;---------------------------------------
- gld ldy secpos,x
- iny
- lda #0
- sta glidel,x
- sta glideh,x
- lda ($f8),y
- pha
- cmp #$60
- bcc gl1
- sec
- sbc #$60
- gl1 clc
- adc trpose,x
- sta glfrom,x
- iny
- glsl lda ($f8),y
- cmp #$60
- bcc gl2
- sec
- sbc #$60
- gl2 clc
- adc trpose,x
- sta glto,x
- pha
- tay
- lda frqlo,y
- sta gldel,x
- lda frqhi,y
- sta gldeh,x
- pla
-
- cmp glfrom,x
- beq gl4
- bcs glup
- lda efflo,x
- eor #$ff
- clc
- adc #$01
- sta gll,x
- lda effhi,x
- eor #$ff
- adc #0
- sta glh,x
- lda #0
- beq gl3
- glup
- lda efflo,x
- sta gll,x
- lda effhi,x
- sta glh,x
- gl3
- pla
- inc secpos,x
- inc secpos,x
- jmp note
- gl4
- lda #0
- sta gll,x
- beq gl3
- ;---------------------------------------
- sld ldy secpos,x
- iny
- lda #0
- sta glidel,x
- sta glideh,x
- lda #1
- sta cont,x
- lda notev,x
- sta glfrom,x
- sec
- sbc trpose,x
- pha
- dec secpos,x
- lda #0
- beq glsl
- ;---------------------------------------
- vibr lda efflo,x
- sta vaddl,x
- sta vaddl1,x
- lda effhi,x
- and #$0f
- sta vaddh,x
- lsr a
- sta vaddh1,x
- ror vaddl1,x
- lda effhi,x
- lsr a
- lsr a
- lsr a
- lsr a
- sta vspeed,x
- lsr a
- sta vspeed1,x
- lda #0
- sta vilo,x
- sta vihi,x
- sta vifirst,x
- sta vdir,x
- jmp nofx
- ;---------------------------------------
- flt lda efflo,x
- tay
- and #$f0
- beq fltvo
- sta filtyp
- tya
- asl a
- asl a
- asl a
- asl a
- sta resonance
- lda filcon
- and #$7f
- sta filcon
-
- lda filcont,x
- ora filconf
- sta filconf
- jmp nofx
- fltvo lda filconf
- and filcont1,x
- sta filconf
- bne fltvo1
- lda filcon
- ora #$80
- sta filcon
- fltvo1 jmp nofx
- ;---------------------------------------
- contf lda #1
- eor fcont
- sta fcont
- jmp nofx
- ;---------------------------------------
- frq lda efflo,x
- ora effhi,x
- beq frq2
- sta frqf
- lda efflo,x
- sta flo
- lda effhi,x
- and #7
- sta fhi
- jmp nofx
- frq2 lda #0
- sta frqf
- jmp nofx
- ;---------------------------------------
- arp lda efflo,x
- sta wavexpos,x
- lda effhi,x
- and #$0f
- sta xwvspeed,x
- jmp nofx
- ;---------------------------------------
- fne lda efflo,x
- sta fine,x
- jmp nofx
- send
- ;---------------------------------------
- ;---------------------------------------
- ;supercommands
- ;---------------------------------------
- ;00 - nothing
- ;01 - cont. pulse (no pulse restart)
- ;02 - srr.xx
- ;03 - adr.xx
- ;04 - vol.xx
- ;05 - gld.xxxx
- ;06 - sld.xxxx
- ;07 - vib.xxxx
- ;08 - flt.xy x=type,y=resonance
- ;09 - cont. filt (no filter restart)
- ;0a - frq.xxx
- ;0b - arp.yxx y=new speed x=new point
- ;---------------------------------------
-
- commtab = $3d40
- commtab1 = $3d80
- commtab2 = $3dc0
- *= $0f80
- commtab3
- .word nofx,contp,sust,adr,vol
- .word gld,sld,vibr,flt,contf
- .word frq,arp,fne,send
-
-
- *= $0fe0
- .word trpos,wspeed,susa
-
- ;---------------------------------------
- trakk = $3e00
-
- ;---------------------------------------
- seclo = $3f00
-
- sechi = $3f80
-
- ;---------------------------------------
- ;commands
- ;$ff xx loop xx
- ;$fe stop voice
- ;$fd xx transpose +xx
- ;$fc xx transpose -xx
- ;$fb xx fadein xx
- ;$fa xx fadeout xx
- ;$ex volume x
-
- ;---------------------------------------
- ;---------------------------------------
- ;commands $fd.xx dur xx
- ;$fc.xx snd xx
- ;$fe cont(---)
- ;$fb gate
- ;$fa switch
- ;$f9 cut
-
-
-
- ;---------------------------------------
-
- ;---------------------------------------
- ;instrument data
- ;---------------------------------------
- adtab = $4000
- srtab = $4100
- wavptab = $4200
- pulptab = $4300
- filptab = $4400
- efftab = $4500
-
-
- wavetab = $4600
-
- freqtab = $4700
-
- pulstab1 = $4800
-
- pulstab2 = $4900
-
- filttab1 = $4a00
- filttab2 = $4b00
-
- ;---------------------------------------
-
-